package data_stracture;

public class 汉诺塔 {
    //计算移动的次数
    public double han(int n){
        if (n==1){
            return 1;
        }else{
            return 2*han(n-1)+1;
        }
    }
    //计算移动的具体步骤
    public void HanoiMove(int n,char a,char b,char c){//a,b,c为柱子
        if (n==1){
            moveDetail(a, c);//只有一个盘子的时候直接移动
        }else{
            HanoiMove(n-1, a, c, b);//将A柱子上n-1个盘子借助C柱子移动到B柱子上面
            moveDetail(a, c);//将A柱子上面的最后一个盘子移动到C盘子上面
            HanoiMove(n-1, b, a, c);//将B柱子上的n-1个盘子借助A柱子移动到C柱子上
        }
    }
    public void moveDetail(char m,char n){
        System.out.println(m+"->"+n);
    }
    public static void main(String[] args) {
       // System.out.println(new 汉诺塔().han(64));
        new 汉诺塔().HanoiMove(4, 'a','b', 'c');

    }

}
